package com.neusoft.NursingHome.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.neusoft.NursingHome.po.BedInformation;
import com.neusoft.NursingHome.po.ResponseBean;
import com.neusoft.NursingHome.service.BedInformationService;

@RestController
@RequestMapping("/bedinfo")
public class BedInformationController {

    @Autowired
    private BedInformationService bedInformationService;

    /**
     * 获取床位总数
     * @return 返回包含床位总数的 ResponseBean
     */
    @GetMapping("/count")
    public ResponseBean<Integer> getBedCount() {
        Integer count = bedInformationService.getBedCount();
        return new ResponseBean<>(count);
    }

    /**
     * 获取空闲床位总数（状态=0）
     * @return 返回包含空闲床位总数的 ResponseBean
     */
    @GetMapping("/free")
    public ResponseBean<Integer> getFreeBedCount() {
        Integer count = bedInformationService.getFreeBedCount();
        return new ResponseBean<>(count);
    }

    /**
     * 获取占用床位总数（状态=2）
     * @return 返回包含占用床位总数的 ResponseBean
     */
    @GetMapping("/busy")
    public ResponseBean<Integer> getBusyBedCount() {
        Integer count = bedInformationService.getBusyBedCount();
        return new ResponseBean<>(count);
    }

    /**
     * 获取外出床位总数（状态=1）
     * @return 返回包含外出床位总数的 ResponseBean
     */
    @GetMapping("/out")
    public ResponseBean<Integer> getOutBedCount() {
        Integer count = bedInformationService.getOutBedCount();
        return new ResponseBean<>(count);
    }

    /**
     * 获取所有楼层列表（去重）
     * @return 返回包含楼层列表的 ResponseBean
     */
    @GetMapping("/floors")
    public ResponseBean<List<String>> getFloors() {
        List<String> floors = bedInformationService.getFloors();
        return new ResponseBean<>(floors);
    }

    /**
     * 获取指定楼层下的所有房间（去重）
     * @param floor 楼层号
     * @return 返回包含房间列表的 ResponseBean
     */
    @GetMapping("/rooms/{floor}")
    public ResponseBean<List<String>> getRoomsByFloor(@PathVariable String floor) {
        List<String> rooms = bedInformationService.getRoomsByFloor(floor);
        return new ResponseBean<>(rooms);
    }

    /**
     * 获取指定房间下的所有床位信息
     * @param room 房间号
     * @return 返回包含床位信息列表的 ResponseBean
     */
    @GetMapping("/{room}/beds")
    public ResponseBean<List<BedInformation>> getBedsByRoom(@PathVariable String room) {
        List<BedInformation> beds = bedInformationService.getBedsByRoom(room);
        return new ResponseBean<>(beds);
    }

    /**
     * 更新床位状态
     * @param bedId 床位ID
     * @param status 新状态（0:空闲 1:外出 2:有人）
     * @return 返回操作结果的 ResponseBean
     */
    @PutMapping("/status")
    public ResponseBean<Boolean> updateBedStatus(
            @RequestParam Integer bedId,
            @RequestParam Byte status) {
        boolean result = bedInformationService.updateBedStatus(bedId, status);
        return new ResponseBean<>(result);
    }

    /**
     * 添加床位信息
     * @param bedInformation 床位信息对象
     * @return 返回添加结果的 ResponseBean
     */
    @PostMapping
    public ResponseBean<Boolean> addBedInfo(@RequestBody BedInformation bedInformation) {
        boolean result = bedInformationService.addBedInfo(bedInformation);
        return new ResponseBean<>(result);
    }

    /**
     * 获取床位的详细信息
     * @param bedId 床位ID
     * @return 返回包含床位详细信息的 ResponseBean
     */
    @GetMapping("/{bedId}")
    public ResponseBean<BedInformation> getBedInfoById(@PathVariable Integer bedId) {
        BedInformation bedInfo = bedInformationService.getBedInfoById(bedId);
        return new ResponseBean<>(bedInfo);
    }

    /**
     * 删除床位信息（逻辑删除）
     * @param bedId 床位ID
     * @return 返回删除结果的 ResponseBean
     */
    @DeleteMapping("/{bedId}")
    public ResponseBean<Boolean> deleteBedInfo(@PathVariable Integer bedId) {
        boolean result = bedInformationService.deleteBedInfo(bedId);
        return new ResponseBean<>(result);
    }
}